{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "_cell_guid": "059208d1-5542-4d80-9ee2-cee9a4391e78",
    "_uuid": "333dc72902f9a7b163226cb187cf989768665c43"
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "plt.style.use('ggplot') # 风格"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "_cell_guid": "0d788097-f6b8-4fca-99b4-f5102d1bbade",
    "_uuid": "d15b5491570a8ec6188b77240ab334f9b68f2655"
   },
   "outputs": [
    {
     "data": {
      "text/plain": "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n0            6      148             72             35        0  33.6   \n1            1       85             66             29        0  26.6   \n2            8      183             64              0        0  23.3   \n3            1       89             66             23       94  28.1   \n4            0      137             40             35      168  43.1   \n\n   DiabetesPedigreeFunction  Age  Outcome  \n0                     0.627   50        1  \n1                     0.351   31        0  \n2                     0.672   32        1  \n3                     0.167   21        0  \n4                     2.288   33        1  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Pregnancies</th>\n      <th>Glucose</th>\n      <th>BloodPressure</th>\n      <th>SkinThickness</th>\n      <th>Insulin</th>\n      <th>BMI</th>\n      <th>DiabetesPedigreeFunction</th>\n      <th>Age</th>\n      <th>Outcome</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>6</td>\n      <td>148</td>\n      <td>72</td>\n      <td>35</td>\n      <td>0</td>\n      <td>33.6</td>\n      <td>0.627</td>\n      <td>50</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>85</td>\n      <td>66</td>\n      <td>29</td>\n      <td>0</td>\n      <td>26.6</td>\n      <td>0.351</td>\n      <td>31</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>8</td>\n      <td>183</td>\n      <td>64</td>\n      <td>0</td>\n      <td>0</td>\n      <td>23.3</td>\n      <td>0.672</td>\n      <td>32</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>1</td>\n      <td>89</td>\n      <td>66</td>\n      <td>23</td>\n      <td>94</td>\n      <td>28.1</td>\n      <td>0.167</td>\n      <td>21</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0</td>\n      <td>137</td>\n      <td>40</td>\n      <td>35</td>\n      <td>168</td>\n      <td>43.1</td>\n      <td>2.288</td>\n      <td>33</td>\n      <td>1</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Load the dataset\n",
    "df = pd.read_csv('diabetes.csv') # 二维表格\n",
    "\n",
    "#Print the first 5 rows of the dataframe.\n",
    "df.head()\n",
    "# Pregnancies 是否怀孕\n",
    "# Glucose 血糖值  70~140 正常\n",
    "# BloodPressure 血压  高血压: 收缩压≥140mmHg舒张压≥90mmHg 低血压：血压低于90/60mmHg\n",
    "# SkinThickness 皮肤厚度 mm\n",
    "# Insulin  两小时血清胰岛素 muU/ml\n",
    "# BMI 体重指数 = 体重公斤/（身高米）^2 成人标准值是BMI18.5-23.9。\n",
    "# DiabetesPedigreeFunction 糖尿病系统功能 \n",
    "# AGE 年龄\n",
    "\n",
    "# outCome 1 = 糖尿病 0没有糖尿病"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "_cell_guid": "766ae7f8-b08c-4ca7-bc1e-7e0401ac7fce",
    "_uuid": "25e59b9710940c6b4d86dc6e1487ce41dbf284e3"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(768, 9)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 我们有768行和9列。前8列表示特性，最后一列表示目标/Label。\n",
    "df.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "_cell_guid": "a405c050-6a75-4c4a-803f-86db6152d796",
    "_uuid": "5b6e02cc6d372bd5c3b646959fdf3db8c0e0a881"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[6.000e+00 1.480e+02 7.200e+01 3.500e+01 0.000e+00 3.360e+01 6.270e-01\n",
      "  5.000e+01]\n",
      " [1.000e+00 8.500e+01 6.600e+01 2.900e+01 0.000e+00 2.660e+01 3.510e-01\n",
      "  3.100e+01]\n",
      " [8.000e+00 1.830e+02 6.400e+01 0.000e+00 0.000e+00 2.330e+01 6.720e-01\n",
      "  3.200e+01]\n",
      " [1.000e+00 8.900e+01 6.600e+01 2.300e+01 9.400e+01 2.810e+01 1.670e-01\n",
      "  2.100e+01]\n",
      " [0.000e+00 1.370e+02 4.000e+01 3.500e+01 1.680e+02 4.310e+01 2.288e+00\n",
      "  3.300e+01]\n",
      " [5.000e+00 1.160e+02 7.400e+01 0.000e+00 0.000e+00 2.560e+01 2.010e-01\n",
      "  3.000e+01]\n",
      " [3.000e+00 7.800e+01 5.000e+01 3.200e+01 8.800e+01 3.100e+01 2.480e-01\n",
      "  2.600e+01]\n",
      " [1.000e+01 1.150e+02 0.000e+00 0.000e+00 0.000e+00 3.530e+01 1.340e-01\n",
      "  2.900e+01]\n",
      " [2.000e+00 1.970e+02 7.000e+01 4.500e+01 5.430e+02 3.050e+01 1.580e-01\n",
      "  5.300e+01]\n",
      " [8.000e+00 1.250e+02 9.600e+01 0.000e+00 0.000e+00 0.000e+00 2.320e-01\n",
      "  5.400e+01]] [1 0 1 0 1 0 1 0 1 1]\n"
     ]
    }
   ],
   "source": [
    "y = df['Outcome'].values # label\n",
    "X = df.drop('Outcome',axis=1).values\n",
    "\n",
    "print(X[:10], y[:10])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "_cell_guid": "c674227c-f930-4ae0-a58a-c3f94c06c7d7",
    "_uuid": "892a7dac3f31c5d7ef1506933102ebdec2605ce0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "214 400\n"
     ]
    }
   ],
   "source": [
    "# 分割数据为训练集和测试集\n",
    "# 训练集 = 0.8  测试集0.2\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=42, stratify=y)\n",
    "\n",
    "pCount = sum([x for x in y_train if x >= 1 ]) # 糖尿病数量\n",
    "nCount = len(y_train) - pCount\n",
    "print(pCount, nCount)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "labels = 'diabetes', 'health' # 标签\n",
    "sizes = [pCount, nCount] # 取值\n",
    "explode = (0, 0.1)\n",
    "\n",
    "fig1, ax1 = plt.subplots()\n",
    "ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',\n",
    "        colors=[\"#d5695d\", \"#65a479\"],\n",
    "        shadow=True, startangle=90)\n",
    "ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "_cell_guid": "ca8346d5-a9a4-4728-8b24-253de0d9a31c",
    "_uuid": "745e27e18bf047cd2c71e014aebd324b306de5b5"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k:1, 训练集准确率:1.0 测试集准确率:0.6623376623376623\n",
      "k:2, 训练集准确率:0.8436482084690554 测试集准确率:0.7142857142857143\n",
      "k:3, 训练集准确率:0.8566775244299675 测试集准确率:0.6948051948051948\n",
      "k:4, 训练集准确率:0.8175895765472313 测试集准确率:0.7272727272727273\n",
      "k:5, 训练集准确率:0.8045602605863192 测试集准确率:0.6688311688311688\n",
      "k:6, 训练集准确率:0.7899022801302932 测试集准确率:0.7142857142857143\n",
      "k:7, 训练集准确率:0.7817589576547231 测试集准确率:0.6753246753246753\n",
      "k:8, 训练集准确率:0.7866449511400652 测试集准确率:0.7077922077922078\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "neighbors = np.arange(1,9) # k 取值范围(目前数据量不是很大, k取1-8, 每个k值训练一个模型)\n",
    "train_accuracy =np.empty(len(neighbors)) # 训练集\n",
    "test_accuracy = np.empty(len(neighbors)) # 测试集\n",
    "\n",
    "# 测试不同k 精度情况\n",
    "for i,k in enumerate(neighbors):\n",
    "    knn = KNeighborsClassifier(n_neighbors=k, algorithm='kd_tree') # n_neighbors 模型参数, 多少个邻居, algorithm 找邻居的优化算法, KD-tree优化\n",
    "    \n",
    "    # 模型训练\n",
    "    knn.fit(X_train, y_train)\n",
    "    \n",
    "    #训练集精度\n",
    "    train_accuracy[i] = knn.score(X_train, y_train)\n",
    "    \n",
    "    #测试集精度\n",
    "    test_accuracy[i] = knn.score(X_test, y_test) \n",
    "    print(\"k:%s, 训练集准确率:%s 测试集准确率:%s\" % (k,train_accuracy[i], test_accuracy[i]))\n",
    "\n",
    "plt.title('kNN Varying number of neighbors')\n",
    "plt.plot(neighbors, test_accuracy, label='Testing Accuracy')\n",
    "plt.plot(neighbors, train_accuracy, label='Training accuracy')\n",
    "plt.legend()\n",
    "plt.xlabel('Number of neighbors')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Pregnancies:0.21\n",
      "Glucose:0.48\n",
      "BloodPressure:0.08\n",
      "SkinThickness:0.09\n",
      "Insulin:0.16\n",
      "BMI:0.3\n",
      "DiabetesPedigreeFunction:0.17\n",
      "Age:0.24\n"
     ]
    }
   ],
   "source": [
    "# 特征选择 -皮尔森系数\n",
    "# 皮尔逊相关系数\n",
    "from scipy.stats import pearsonr\n",
    "import pandas as pd\n",
    "\n",
    "label = ['Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age']\n",
    "train_df = pd.DataFrame(X_train) \n",
    "\n",
    "# train_df[0]\n",
    "\n",
    "# 返回值的第一项是皮尔森相关系数，第二项是p_value值。一般来说皮尔森相关系数越大，p_value越小，线性相关性就越大。\n",
    "# X_train, y_train\n",
    "for i in range(8):\n",
    "    p = pearsonr(train_df[i], y_train)\n",
    "    print('%s:%s'% (label[i], round(p[0],2)))\n",
    "# Glucose:0.48 血糖正相关系数高, 但是医学生原本就有直接关系\n",
    "#\n",
    "# del train_df[2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集人数:614\n"
     ]
    },
    {
     "data": {
      "text/plain": "<pyecharts.render.display.HTML at 0x21f006bb588>",
      "text/html": "\n<script>\n    require.config({\n        paths: {\n            'echarts':'https://assets.pyecharts.org/assets/echarts.min'\n        }\n    });\n</script>\n\n        <div id=\"96fb295e0bb0436d85c5aa580583156a\" style=\"width:900px; height:500px;\"></div>\n\n<script>\n        require(['echarts'], function(echarts) {\n                var chart_96fb295e0bb0436d85c5aa580583156a = echarts.init(\n                    document.getElementById('96fb295e0bb0436d85c5aa580583156a'), 'light', {renderer: 'canvas'});\n                var option_96fb295e0bb0436d85c5aa580583156a = {\n    \"animation\": true,\n    \"animationThreshold\": 2000,\n    \"animationDuration\": 1000,\n    \"animationEasing\": \"cubicOut\",\n    \"animationDelay\": 0,\n    \"animationDurationUpdate\": 300,\n    \"animationEasingUpdate\": \"cubicOut\",\n    \"animationDelayUpdate\": 0,\n    \"series\": [\n        {\n            \"type\": \"bar\",\n            \"name\": \"BMI \\u8303\\u56f4\",\n            \"legendHoverLink\": true,\n            \"data\": [\n                12,\n                82,\n                117,\n                374\n            ],\n            \"showBackground\": false,\n            \"barMinHeight\": 0,\n            \"barCategoryGap\": \"20%\",\n            \"barGap\": \"30%\",\n            \"large\": false,\n            \"largeThreshold\": 400,\n            \"seriesLayoutBy\": \"column\",\n            \"datasetIndex\": 0,\n            \"clip\": true,\n            \"zlevel\": 0,\n            \"z\": 2,\n            \"label\": {\n                \"show\": true,\n                \"position\": \"top\",\n                \"margin\": 8\n            }\n        }\n    ],\n    \"legend\": [\n        {\n            \"data\": [\n                \"BMI \\u8303\\u56f4\"\n            ],\n            \"selected\": {\n                \"BMI \\u8303\\u56f4\": true\n            },\n            \"show\": true,\n            \"padding\": 5,\n            \"itemGap\": 10,\n            \"itemWidth\": 25,\n            \"itemHeight\": 14\n        }\n    ],\n    \"tooltip\": {\n        \"show\": true,\n        \"trigger\": \"item\",\n        \"triggerOn\": \"mousemove|click\",\n        \"axisPointer\": {\n            \"type\": \"line\"\n        },\n        \"showContent\": true,\n        \"alwaysShowContent\": false,\n        \"showDelay\": 0,\n        \"hideDelay\": 100,\n        \"textStyle\": {\n            \"fontSize\": 14\n        },\n        \"borderWidth\": 0,\n        \"padding\": 5\n    },\n    \"xAxis\": [\n        {\n            \"show\": true,\n            \"scale\": false,\n            \"nameLocation\": \"end\",\n            \"nameGap\": 15,\n            \"gridIndex\": 0,\n            \"inverse\": false,\n            \"offset\": 0,\n            \"splitNumber\": 5,\n            \"minInterval\": 0,\n            \"splitLine\": {\n                \"show\": false,\n                \"lineStyle\": {\n                    \"show\": true,\n                    \"width\": 1,\n                    \"opacity\": 1,\n                    \"curveness\": 0,\n                    \"type\": \"solid\"\n                }\n            },\n            \"data\": [\n                \"thin\",\n                \"normal\",\n                \"micro heavy\",\n                \"overweight\"\n            ]\n        }\n    ],\n    \"yAxis\": [\n        {\n            \"show\": true,\n            \"scale\": false,\n            \"nameLocation\": \"end\",\n            \"nameGap\": 15,\n            \"gridIndex\": 0,\n            \"inverse\": false,\n            \"offset\": 0,\n            \"splitNumber\": 5,\n            \"minInterval\": 0,\n            \"splitLine\": {\n                \"show\": false,\n                \"lineStyle\": {\n                    \"show\": true,\n                    \"width\": 1,\n                    \"opacity\": 1,\n                    \"curveness\": 0,\n                    \"type\": \"solid\"\n                }\n            }\n        }\n    ],\n    \"title\": [\n        {\n            \"text\": \"BMI \\u8303\\u56f4\\u7edf\\u8ba1\",\n            \"subtext\": \"\\u5355\\u4f4d: \\u4eba\",\n            \"padding\": 5,\n            \"itemGap\": 10\n        }\n    ],\n    \"brush\": {\n        \"toolbox\": [\n            \"rect\",\n            \"polygon\",\n            \"keep\",\n            \"clear\"\n        ],\n        \"brushType\": \"rect\",\n        \"brushMode\": \"single\",\n        \"transformable\": true,\n        \"brushStyle\": {\n            \"borderWidth\": 1,\n            \"color\": \"rgba(120,140,180,0.3)\",\n            \"borderColor\": \"rgba(120,140,180,0.8)\"\n        },\n        \"throttleType\": \"fixRate\",\n        \"throttleDelay\": 0,\n        \"removeOnClick\": true\n    }\n};\n                chart_96fb295e0bb0436d85c5aa580583156a.setOption(option_96fb295e0bb0436d85c5aa580583156a);\n        });\n    </script>\n"
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pyecharts import options as opts\n",
    "from pyecharts.charts import Bar\n",
    "from pyecharts.faker import Faker\n",
    "from pyecharts.globals import ThemeType\n",
    "\n",
    "# https://gallery.pyecharts.org/#/Bar/bar_base\n",
    "\n",
    "\"\"\"\n",
    "体重指数 = 体重公斤/（身高米）\n",
    "微瘦: <18.5\n",
    "正常: 18.5~24.9\n",
    "微重: 25.9~30\n",
    "超重：>30\n",
    "\"\"\"\n",
    "\n",
    "p1 = sum([1 for x in train_df[5] if x <18.5 ] )\n",
    "p2 = sum([1 for x in train_df[5] if x >=18.5 and x<=24.9 ] )\n",
    "p3 = sum([1 for x in train_df[5] if x > 25.9 and x<= 30 ] )\n",
    "p4 = sum([1 for x in train_df[5] if x > 30 ] )\n",
    "\n",
    "print('训练集人数:%s' % len(train_df))\n",
    "\n",
    "c = (\n",
    "    #Bar()\n",
    "    Bar({\"theme\": ThemeType.MACARONS})\n",
    "    .add_xaxis( [\"thin\", \"normal\", \"micro heavy\", \"overweight\"])\n",
    "    .add_yaxis(\"BMI 范围\",  [p1, p2, p3, p4] )\n",
    "    #.reversal_axis()\n",
    "    .set_global_opts(\n",
    "        title_opts=opts.TitleOpts(title=\"BMI 范围统计\", subtitle=\"单位: 人\"),\n",
    "        brush_opts=opts.BrushOpts(),\n",
    "    )\n",
    ")\n",
    "\n",
    "c.render_notebook()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7272727272727273\n"
     ]
    }
   ],
   "source": [
    "# k = 4 时, 测试效果集准确率最高\n",
    "knn = KNeighborsClassifier(n_neighbors=4, algorithm='kd_tree')\n",
    "\n",
    "#模型训练\n",
    "knn.fit(train_df, y_train)\n",
    "\n",
    "#测试集精度\n",
    "test_df = pd.DataFrame(X_test) \n",
    "score = knn.score(test_df, y_test) \n",
    "print(score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "_uuid": "57054382021f13117bff46195a14935f5a35c758"
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the auc is:0.6989\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "\n",
    "y_pred_proba = knn.predict_proba(test_df)[:,1]\n",
    "fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba) # tpr 真正率和假正率\n",
    "\n",
    "plt.plot([0,1],[0,1],'k--') # 绘制一条y = x 虚线\n",
    "plt.plot(fpr,tpr, label='Knn')\n",
    "plt.xlabel('fpr')\n",
    "plt.ylabel('tpr')\n",
    "plt.title('Knn(n_neighbors=4) ROC curve')\n",
    "plt.show()\n",
    "\n",
    "# auc 取值 - roc 面积\n",
    "from sklearn.metrics import roc_auc_score\n",
    "print(\"the auc is:%s\" % round(roc_auc_score(y_test,y_pred_proba),4)) # 保留4位小数\n",
    "\n",
    "# auc - Roc 曲线下面积(0~1)\n",
    "#0.5 - 0.7: 效果较低\n",
    "#0.7 - 0.85: 效果一般\n",
    "#0.85 - 0.95: 效果很好\n",
    "#0.95 - 1: 神一样的指标, 过拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}